//核心步骤：
//一）、生成一个Person类的派生类 Person_KVO。
//二）、使当前对象的isa指向新的派生类，就会调用派生类的set方法。
//三）、重写Person_KVO的setAge方法，在set方法中拿到观察者（使用运行时关联观察者这个属性）。
//四）、每次重写setAge方法，都调用观察者的ml_observeValueForKeyPath方法。实现时刻监听。

#import "ViewController.h"
#import "Person.h"
#import "NSObject+KVO.h"

@interface ViewController ()<UITabBarControllerDelegate>

@property (nonatomic, strong) Person *person;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    Person *person = [[Person alloc] init];
    _person = person;
    //手写KVO
    [person ml_addObserver:self forKeyPath:@"age" options:NSKeyValueObservingOptionNew context:nil];
    [person ml_addObserver:self forKeyPath:@"name" options:NSKeyValueObservingOptionNew context:nil];
}

//验证手写KVO是否成功
- (void)ml_observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSString *,id> *)change context:(void *)context{
    NSLog(@"person 的值变了：%d %@",_person.age,_person.name);
}


//点击测试效果
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
    _person.name = @"abc";
    _person.age = 15;
    
    
}

@end
